在MFC下基于对话框的程序如何定义全局变量和全局函数

2011-03-1910:21

一、在应用程序类中定义

用MFC生成的工程中都有一个名为CxxxApp的类,它派生于CWinApp类。这个类主要进行程序的初始化,生成文档、视图对象等工作。我们可以把需要全局访问的变量和函数定义为这个类的成员变量和成员函数,就可以实现全局访问了。

从严格意义上讲,这种变量和函数并不是全局的,因为它仍然只是类中的成员,只是由于我们很容易获得CxxxApp类的指针,所以我们可以在文档、视图、对话框以及各种自定义类中访问到它们,达到与全局变量类似的效果。访问时用函数“AfxGetApp()”获得CxxxApp类的指针,用“AfxGetApp()->成员”访问变量或函数。

例:

Test.h:(应用程序类头文件)

classCTestApp:publicCWinApp
{
public:
    intx;//全局变量
    intf(inty);//全局函数
    …………
};

Test.cpp:(应用程序类程序文件)

intCTestApp::f(inty)//全局函数定义
{
    y++;
    returny;
}

定义在CTestApp类中的变量和函数可以在其它类中被访问。比如在视图的某函数中要访问变量x和函数f():

voidCTestView::xyz()
{
    CTestApp*app=(CTestApp*)AfxGetApp();//生成指向应用程序类的指针
    app->x=0;//访问变量x
    intz=app->f(1);//访问函数f()
    …………
}

这样,变量x和函数f()可以视作为全局的。

用这种方法实现的全局变量和全局函数虽比较简单,但也有缺点,一是访问不太方便,每次都需要获取应用程序类的指针;再就是把一些与应用程序类本身无关的变量和函数放在里面,使这个类看上去怪怪的,破坏了类的封装。

二、在XXXDlg.cpp文件中定义为extern类型的全局变量

注意:必须在对这些全局变量定义的时候赋初值!

全局变量位置:所有类和函数之外。

本页共40段,1033个字符,2132 Byte(字节)